home *** CD-ROM | disk | FTP | other *** search
- 1. Controlling the appearance of outgoing messages
- 1.1. How do I set up host masquerading?
- 1.2. How do I set up user masquerading?
-
- 2. Routing outgoing messages
- 2.1. How do I send local messages to another host?
- 2.2. How do I set up a null client?
- 2.3. How do I send outgoing mail through UUCP?
- 2.4. How do I set up a separate queue for a SLIP/PPP link?
- 2.5. How do I deal with ``CNAME lookup failed temporarily''?
-
- 3. Routing incoming messages by host
- 3.1. How do I receive mail for another host name?
- 3.2. How do I set up a virtual domain?
- 3.3. How do I set up several virtual domains for one user?
-
- 4. Routing incoming messages by user
- 4.1. How do I forward unrecognized usernames to another host?
- 4.2. How do I set up a mailing list?
- 4.3. How do I use majordomo with qmail?
- 4.4. How do I use procmail with qmail?
- 4.5. How do I use elm's filter with qmail?
- 4.6. How do I create aliases with dots?
-
- 5. Setting up servers
- 5.1. How do I run qmail-smtpd under tcpserver?
- 5.2. How do I set up qmail-qmtpd?
- 5.3. How do I set up qmail-pop3d?
- 5.4. How do I allow selected clients to use this host as a relay?
- 5.5. How do I fix up messages from broken SMTP clients?
-
- 6. Configuring MUAs to work with qmail
- 6.1. How do I make BSD mail generate a Date with the local time zone?
- 6.2. How do I stop pine from crashing?
- 6.3. How do I make MH work with qmail?
- 6.4. How do I stop Sun's dtcm from hanging?
-
- 7. Managing the mail system
- 7.1. How do I safely stop qmail-send?
- 7.2. How do I manually run the queue?
- 7.3. How do I rejuvenate a message?
- 7.4. How do I organize a big network?
- 7.5. How do I back up and restore the queue disk?
-
- 8. Miscellany
- 8.1. How do I tell qmail to do more deliveries at once?
- 8.2. How do I keep a copy of all incoming and outgoing mail messages?
- 8.3. How do I switch slowly from sendmail to qmail?
-
-
-
- 1. Controlling the appearance of outgoing messages
-
-
- 1.1. How do I set up host masquerading? All the users on this host,
- zippy.af.mil, are users on af.mil. When joe sends a message to fred, the
- message should say ``From: joe@af.mil'' and ``To: fred@af.mil'', without
- ``zippy'' anywhere.
-
- Answer: echo af.mil > /var/qmail/control/defaulthost; chmod 644
- /var/qmail/control/defaulthost.
-
-
- 1.2. How do I set up user masquerading? I'd like my own From lines to
- show boss@af.mil rather than god@heaven.af.mil.
-
- Answer: Add MAILHOST=af.mil and MAILUSER=boss to your environment. To
- override From lines supplied by your MUA, add QMAILINJECT=f to your
- environment.
-
-
-
- 2. Routing outgoing messages
-
-
- 2.1. How do I send local messages to another host? All the mail for
- af.mil should be delivered to our disk server, pokey.af.mil. I've set up
- an MX from af.mil to pokey.af.mil, but when a user on the af.mil host
- sends a message to boss@af.mil, af.mil tries to deliver it locally. How
- do I stop that?
-
- Answer: Remove af.mil from /var/qmail/control/locals. If qmail-send is
- running, give it a HUP. Make sure the MX is set up properly before you
- do this. Also make sure that pokey can receive mail for af.mil---see
- question 3.1.
-
-
- 2.2. How do I set up a null client? I'd like zippy.af.mil to
- send all mail to bigbang.af.mil.
-
- Answer: echo :bigbang.af.mil > /var/qmail/control/smtproutes;
- chmod 644 /var/qmail/control/smtproutes. Disable local delivery as in
- question 2.1. Turn off qmail-smtpd in /etc/inetd.conf.
-
-
- 2.3. How do I send outgoing mail through UUCP? I need qmail to send all
- outgoing mail via UUCP to my upstream UUCP site, gonzo.
-
- Answer: Put
-
- :alias-uucp
-
- into control/virtualdomains and
-
- |preline -df /usr/bin/uux - -r -gC -a"$SENDER" gonzo!rmail "($EXT2@$HOST)"
-
- into ~alias/.qmail-uucp-default. (For some UUCP software you will need
- to use -d instead of -df. Also, you may need to insert a space between
- -a and "$SENDER" for bounces to work properly.) If qmail-send is
- running, give it a HUP.
-
-
- 2.4. How do I set up a separate queue for a SLIP/PPP link?
-
- Answer: Use serialmail (http://pobox.com/~djb/serialmail.html).
-
-
- 2.5. How do I deal with ``CNAME lookup failed temporarily''? The log
- showed that a message was deferred for this reason. Why is qmail doing
- CNAME lookups, anyway?
-
- Answer: The SMTP standard does not permit aliased hostnames, so qmail
- has to do a CNAME lookup in DNS for every sender and recipient host. If
- the relevant DNS server is down, qmail defers the message. It will try
- again soon.
-
-
-
- 3. Routing incoming messages by host
-
-
- 3.1. How do I receive mail for another host name? I'd like our disk
- server, pokey.af.mil, to receive mail addressed to af.mil. I've set up
- an MX from af.mil to pokey.af.mil, but how do I get pokey to treat
- af.mil as a name for the local host?
-
- Answer: Add af.mil to /var/qmail/control/locals and to
- /var/qmail/control/rcpthosts. If qmail-send is running, give it a HUP.
-
-
- 3.2. How do I set up a virtual domain? I'd like any mail for
- nowhere.mil, including root@nowhere.mil and postmaster@nowhere.mil and
- so on, to be delivered to Bob. I've set up the MX already.
-
- Answer: Put
-
- nowhere.mil:bob
-
- into control/virtualdomains. Add nowhere.mil to control/rcpthosts. If
- qmail-send is running, give it a HUP.
-
- Now mail for whatever@nowhere.mil will be delivered locally to
- bob-whatever. Bob can set up ~bob/.qmail-default to catch all the
- possible addresses, ~bob/.qmail-info to catch info@nowhere.mil, etc.
-
-
- 3.3. How do I set up several virtual domains for one user? Bob wants
- another virtual domain, everywhere.org, but he wants to handle
- nowhere.mil users and everywhere.org users differently. How can we do
- that without setting up a second account?
-
- Answer: Put two lines into control/virtualdomains:
-
- nowhere.mil:bob-nowhere
- everywhere.org:bob-everywhere
-
- Add nowhere.mil and everywhere.org to control/rcpthosts. If qmail-send
- is running, give it a HUP.
-
- Now Bob can set up separate .qmail-nowhere-* and everywhere-* files. He
- can even set up .qmail-nowhere-default and .qmail-everywhere-default.
-
-
-
- 4. Routing incoming messages by user
-
-
- 4.1. How do I forward unrecognized usernames to another host? I'd like
- to set up a LUSER_RELAY pointing at bigbang.af.mil.
-
- Answer: Put
-
- | forward "$LOCAL"@bigbang.af.mil
-
- into ~alias/.qmail-default.
-
-
- 4.2. How do I set up a mailing list? I'd like me-sos@my.host.name to be
- forwarded to a bunch of people.
-
- Answer: Put a list of addresses into ~me/.qmail-sos, one per line. Then
- incoming mail for me-sos will be forwarded to each of those addresses.
- You should also touch ~me/.qmail-sos-owner so that bounces come back to
- you rather than the original sender. If you want subscriptions to be
- handled automatically, put
-
- | qlist2 sos my.host.name
-
- into ~me/.qmail-sos-request. Anyone who wants to subscribe can simply
- send a message to me-sos-request@my.host.name.
-
-
- 4.3. How do I use majordomo with qmail?
-
- Answer: You need to patch majordomo so that it creates qmail-style
- lists. See ftp://koobera.math.uic.edu/pub/software/majordomo+qmail.gz.
- Exception: qmsmac understands sendmail-style :include: files, so you
- shouldn't patch majordomo if you're using qmsmac.
-
-
- 4.4. How do I use procmail with qmail?
-
- Answer: Put
-
- | preline procmail
-
- into ~/.qmail. You'll have to use a full path for procmail unless
- procmail is in the system's startup PATH. Note that procmail will try to
- deliver to /usr/spool/mail/$USER by default; to change this, change
- SYSTEM_MBOX in procmail's config.h.
-
-
- 4.5. How do I use elm's filter with qmail?
-
- Answer: Put
-
- | preline filter
-
- into ~/.qmail. You'll have to use a full path for filter unless filter
- is in the system's startup PATH.
-
-
- 4.6. How do I create aliases with dots? I tried setting up
- ~alias/.qmail-P.D.Q.Bach, but it doesn't do anything.
-
- Answer: Use .qmail-p:d:q:bach. Dots are converted to colons, and
- uppercase is converted to lowercase.
-
-
-
- 5. Setting up servers
-
-
- 5.1. How do I run qmail-smtpd under tcpserver? inetd is barfing at high
- loads, cutting off service for ten-minute stretches. I'd also like
- better connection logging.
-
- Answer: First, install the tcpserver program, part of the ucspi-tcp
- package (http://pobox.com/~djb/ucspi-tcp.html). Second, remove the smtp
- line from /etc/inetd.conf, and put the line
-
- tcpserver -u 7770 -g 2108 0 smtp /var/qmail/bin/qmail-smtpd &
-
- into your system startup files. Replace 7770 with your qmaild uid, and
- replace 2108 with your nofiles gid. Don't forget the &. The change will
- take effect at your next reboot.
-
- By default, tcpserver allows at most 40 simultaneous qmail-smtpd
- processes. To raise this limit to 400, use tcpserver -c 400. To keep
- track of who's connecting and for how long, run (on two lines)
-
- tcpserver -v -u 7770 -g 2108 0 smtp /var/qmail/bin/qmail-smtpd \
- 2>&1 | /var/qmail/bin/splogger smtpd 3 &
-
-
- 5.2. How do I set up qmail-qmtpd?
-
- Answer: Two steps. First, put a
-
- qmtp 209/tcp
-
- line into /etc/services. Second, put (all on one line)
-
- qmtp stream tcp nowait qmaild
- /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-qmtpd
-
- into /etc/inetd.conf, and give inetd a HUP.
-
- If you have tcpserver installed, skip the inetd step, and set up
-
- tcpserver -u 7770 -g 2108 0 qmtp /var/qmail/bin/qmail-qmtpd &
-
- replacing 7770 and 2108 with the qmaild uid and nofiles gid. See
- question 5.1 for more details.
-
-
- 5.3. How do I set up qmail-pop3d?
-
- Answer: Four steps. First, install the checkpassword program
- (http://pobox.com/~djb/checkpwd.html). Second, make sure you have a
-
- pop3 110/tcp
-
- line in /etc/services. Third, put (all on one line)
-
- pop3 stream tcp nowait root /var/qmail/bin/qmail-popup
- qmail-popup YOURHOST /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir
-
- into /etc/inetd.conf, and give inetd a HUP; replace YOURHOST with your
- host's fully qualified domain name. Fourth, set up Maildir delivery for
- any user who wants to read mail via POP.
-
- If you have tcpserver installed, skip the inetd step, and set up (on two
- lines)
-
- tcpserver 0 pop3 /var/qmail/bin/qmail-popup YOURHOST \
- /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
-
- replacing YOURHOST with your host's fully qualified domain name. See
- question 5.1 for more details.
-
- Security note: pop3d should be used only within a secure network;
- otherwise an eavesdropper can steal passwords.
-
-
- 5.4. How do I allow selected clients to use this host as a relay? I see
- that qmail-smtpd rejects messages to any host not listed in
- control/rcpthosts. I know I could entirely disable this feature by
- removing control/rcpthosts, but I want to be more selective.
-
- Answer: Three steps. First, install tcp-wrappers, available separately,
- including hosts_options. Second, change your qmail-smtpd line in
- inetd.conf to
-
- smtp stream tcp nowait qmaild /usr/local/bin/tcpd
- /var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd
-
- (all on one line) and give inetd a HUP. Third, in tcpd's hosts.allow,
- make a line setting the environment variable RELAYCLIENT to the empty
- string for the selected clients:
-
- tcp-env: 1.2.3.4, 1.2.3.5: setenv = RELAYCLIENT
-
- Here 1.2.3.4 and 1.2.3.5 are the clients' IP addresses. qmail-smtpd
- ignores control/rcpthosts when RELAYCLIENT is set. (It also appends
- RELAYCLIENT to each envelope recipient address. See question 5.5 for an
- application.)
-
- Alternative procedure, if you are using tcpserver: Install tcpcontrol
- (http://pobox.com/~djb/tcpcontrol.html). Create /etc/tcp.smtp containing
-
- 1.2.3.6:allow,RELAYCLIENT=""
- 127.:allow,RELAYCLIENT=""
-
- to allow clients with IP addresses 1.2.3.6 and 127.*. Run
-
- tcpmakectl /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
-
- Finally, insert
-
- tcpcontrol /etc/tcp.smtp.cdb
-
- before /var/qmail/bin/qmail-smtpd in your tcpserver line.
-
-
- 5.5. How do I fix up messages from broken SMTP clients?
-
- Answer: Three steps. First, put
-
- | [ "@$HOST" = "@fixme" ] || ( echo Permission denied; exit 100 )
- | qmail-inject -f "$SENDER" -- "$EXT2"
-
- into ~alias/.qmail-fixup-default. Second, put
-
- fixme:fixup
-
- into /var/qmail/control/virtualdomains, and give qmail-send a HUP.
- Third, follow the procedure in question 5.4, but set RELAYCLIENT to the
- string ``@fixme'':
-
- tcp-env: 1.2.3.6, 1.2.3.7: setenv = RELAYCLIENT @fixme
-
- Here 1.2.3.6 and 1.2.3.7 are the clients' IP addresses. If you are using
- tcpserver and tcpcontrol instead of inetd and tcpd, put
-
- 1.2.3.6:allow,RELAYCLIENT="@fixme"
- 1.2.3.7:allow,RELAYCLIENT="@fixme"
-
- into /etc/tcp.smtp, and run tcpmakectl as in question 5.4.
-
-
-
- 6. Configuring MUAs to work with qmail
-
-
- 6.1. How do I make BSD mail generate a Date with the local time zone?
- When I send mail, I'd rather use the local time zone than GMT, since
- some MUAs don't know how to display Date in the receiver's time zone.
-
- Answer: Put
-
- set sendmail=/var/qmail/bin/datemail
-
- into your .mailrc or your system-wide Mail.rc. Beware that BSD mail is
- neither secure nor reliable.
-
-
- 6.2. How do I stop pine from crashing? When I ask any version of pine
- past 3.91 to send mail, it crashes.
-
- Answer: Put
-
- sendmail-path=/usr/lib/sendmail -oem -oi -t
-
- into /usr/local/lib/pine.conf. (This will work with sendmail too.)
- Beware that pine is neither secure nor reliable.
-
-
- 6.3. How do I make MH work with qmail?
-
- Answer: Put
-
- postproc: /usr/mh/lib/spost
-
- into each user's .mh_profile. (This will work with sendmail too.) Beware
- that MH is neither secure nor reliable.
-
-
- 6.4. How do I stop Sun's dtcm from hanging?
-
- Answer: There is a novice programming error in dtcm, known as ``failure
- to close the output side of the pipe in the child.'' Sun has, at the
- time of this writing, not yet provided a patch. Sorry.
-
-
-
- 7. Managing the mail system
-
-
- 7.1. How do I safely stop qmail-send? Back when we were running
- sendmail, it was always tricky to kill sendmail without risking the loss
- of current deliveries; what should I do with qmail-send?
-
- Answer: Go ahead and kill the qmail-send process. It will shut down
- cleanly. Wait for ``exiting'' to show up in the log. To restart it, run
- qmail-start the same way as it's run from your system boot scripts.
-
-
- 7.2. How do I manually run the queue? I'd like qmail to try delivering
- all the remote messages right now.
-
- Answer: Give the qmail-send process an ALRM.
-
-
- 7.3. How do I rejuvenate a message? Somebody broke into Eric's computer
- again; it's going to be down for at least another two days. I know Eric
- has been expecting an important message---in fact, I see it sitting here
- in /var/qmail/queue/mess/15/26902. It's been in the queue for six days;
- how can I make sure it isn't bounced tomorrow?
-
- Answer: Just touch /var/qmail/queue/info/15/26902. (This is the only
- form of queue modification that's safe while qmail is running.)
-
-
- 7.4. How do I organize a big network? I have a lot of machines, and I
- don't know where to start.
-
- Answer: First, choose the domain name where your users will receive
- mail. This is normally the shortest domain name you control. If you are
- in charge of *.movie.edu, you can use addresses like joe@movie.edu.
-
- Second, choose the machine that will know what to do with different
- users at movie.edu. Set up a host name in DNS for this machine:
-
- mailhost.movie.edu IN A 1.2.3.4
- 4.3.2.1.in-addr.arpa IN PTR mailhost.movie.edu
-
- Here 1.2.3.4 is the IP address of that machine.
-
- Third, make a list of machines where mail should end up. For example, if
- mail for Bob should end up on Bob's workstation, put Bob's workstation
- onto the list. For each of these machines, set up a host name in DNS:
-
- bobshost.movie.edu IN A 1.2.3.7
- 7.3.2.1.in-addr.arpa IN PTR bobshost.movie.edu
-
- Fourth, install qmail on bobshost.movie.edu. qmail will automatically
- configure itself to accept messages for bob@bobshost.movie.edu and
- deliver them to ~bob/Mailbox on bobshost. Do the same for the other
- machines where mail should end up.
-
- Fifth, install qmail on mailhost.movie.edu. Put
-
- movie.edu:alias-movie
-
- into control/virtualdomains on mailhost. Then forward bob@movie.edu to
- bob@bobshost.movie.edu, by putting
-
- bob@bobshost.movie.edu
-
- into ~alias/.qmail-movie-bob. Do the same for other users.
-
- Sixth, put movie.edu into control/rcpthosts on mailhost.movie.edu, so
- that mailhost.movie.edu will accept messages for users at movie.edu.
-
- Seventh, set up an MX record in DNS to deliver movie.edu messages to
- mailhost:
-
- movie.edu IN MX 10 mailhost.movie.edu
-
- Eighth, on all your machines, put movie.edu into control/defaulthost.
-
-
- 7.5. How do I back up and restore the queue disk?
-
- Answer: You can't.
-
- One difficulty is that you can't get a consistent snapshot of the queue
- while qmail-send is running. Another difficulty is that messages in the
- queue must have filenames that match their inode numbers.
-
- However, the big problem is that backups---even twice-daily backups---
- are far too unreliable for mail. If your disk dies, there will be very
- little overlap between the messages saved in the last backup and the
- messages that were lost.
-
- There are several ways to add real reliability to a mail server. Battery
- backups will keep your server alive, letting you park the disk to avoid
- a head crash, when the power goes out. Solid-state disks have their own
- battery backups. RAID boxes let you replace dead disks without losing
- any data.
-
-
-
- 8. Miscellany
-
-
- 8.1. How do I tell qmail to do more deliveries at once? It's running
- only 20 parallel qmail-remote processes.
-
- Answer: Decide how many deliveries you want to allow at once. Put that
- number into control/concurrencyremote. Restart qmail-send as in question
- 7.1. If your system has resource limits, make sure you set the
- descriptors limit to at least double the concurrency plus 5; otherwise
- you'll get lots of unnecessary deferrals whenever a big burst of mail
- shows up. Note that qmail also imposes a compile-time concurrency limit,
- 120 by default; this is set in conf-spawn.
-
-
- 8.2. How do I keep a copy of all incoming and outgoing mail messages?
-
- Answer: Set QUEUE_EXTRA to "Tlog\0" and QUEUE_EXTRALEN to 5 in extra.h.
- Recompile qmail. Put ./msg-log into ~alias/.qmail-log.
-
- You can also use QUEUE_EXTRA to, e.g., record the Message-ID of every
- message: run
-
- | awk '/^$/ { exit } /^[mM][eE][sS][sS][aA][gG][eE]-/ { print }'
-
- from ~alias/.qmail-log.
-
-
- 8.3. How do I switch slowly from sendmail to qmail? I'm thinking of
- moving the heaven.af.mil network over to qmail, but first I'd like to
- give my users a chance to try out qmail without affecting current
- sendmail deliveries. We're using NFS.
-
- Answer: Find a host in your network, say pc.heaven.af.mil, that isn't
- running an SMTP server. (If addresses at pc.heaven.af.mil are used, you
- should already have an MX pointing pc.heaven.af.mil to your mail hub.)
-
- Set up a new MX record pointing lists.heaven.af.mil to pc.heaven.af.mil.
- Install qmail on pc.heaven.af.mil. Replace pc with lists in the control
- files. Make the qmail man pages available on all your machines.
-
- Now tell your users about qmail. A user can forward joe@heaven.af.mil to
- joe@lists.heaven.af.mil to get ~/Mailbox delivery; he can set up .qmail
- files; he can start running his own mailing lists @lists.heaven.af.mil.
-
- When you're ready to turn sendmail off, you can set up pc.heaven.af.mil
- as your new mail hub. Add heaven.af.mil to control/locals, and change
- the heaven.af.mil MX to point to pc.heaven.af.mil. Make sure you leave
- lists.heaven.af.mil in control/locals so that transition addresses will
- continue to work.
-